כתבו קוד ב- 3 קבצי ה hpp (כתבו כהערה את שם הקובץ מעל) כך שהקוד יהיה תקין ובסגנון טוב. אין חובה

Similar documents
במידה ולסעיף ניתנה תשובה ובנוסף נרשם לגבי הסעיף לא יודע/ת אזי הניקוד שיינתן

<exp> ::= <define> <cexp> <define> ::= ( define <var-decl> <cexp> ) / DefExp(var:VarDecl, val:cexp)

ב ה צ ל ח ה! אוניברסיטת בן גוריון בנגב מספר נבחן : תאריך המבחן: כ"ה תשרי תשע"ח 15/10/17 שמות המורים: ציון סיקסיק מיועד לתלמידי : א'

שים לב! אין לכתוב בשוליים. השוליים יחתכו לצורך סריקת המבחן.

מצליחה. 1. int fork-bomb() 2. { 3. fork(); 4. fork() && fork() fork(); 5. fork(); printf("bla\n"); 8. return 0; 9. }

מבוא לתכנות ב- JAVA תרגול 7

Algorithms. Intro2CS week 5

מבוא למדעי המחשב תרגול 13: עצים בינאריים

הנכות 1 םוכיס לוגרת 14 1

הנכות 1 םוכיס לוגרת 13 1

הערה על הפתרון: בתנאי הקדם אין לבדוק שהמשחק לא השתנה. המתודה מוגדרת היטב ויש לה ערך החזרה למקרה זה.

Exams questions examples

רזח יליגרתו םי יראני ב ם


3 Dynamic Routing A (RIP and OSPF)

מבוא לתכנות תוכנית שעור מס. 1 1 דר' דרור טובי, המרכז האוניברסיטאי אריאל בשומרון.

מדעי המחשב 2 יחידות לימוד פתרון בחינת הבגרות פרק א. I x > a. פתרון 2: משפט switch

הוראות חיבור e-port בפרוטוקול Art-Net למערכות תאורה שונות

Amortized Analysis, Union-Find,

תוכנה 1. תרגול מספר 11: Static vs. Dynamic Binding מחלקות מקוננות Nested Classes

תוכנה 1 סמסטר א' תשע"א

הפלט אחרי הביצוע של ההוראה :what3(root)

Program template-smart-pointers-again.cc

Computer Programming A תרגול 9

הנכות 1 םוכיס לוגרת 13 1

Program template-smart-pointers.cc

שאלות חזרה 2 האוניברסיטה החליטה לפרסם שמות הסטודנטים המצטיינים בקורס שלנו. סטודנט מצטיין הוא סטודנט שקיבל

תרגילים ופתרונות בשפת - C הסתעפויות

שאלה 1, סעיף ב )11 נק'(

מבוא לתכנות בשפת C. Tzachi (Isaac) Rosen

מבוא למדעי המחשב תרגול 8 רשימה משורשרת כללית, Comparator

תוכנה 1 תרגול 2: מערכים, מבני בקרה ושגיאות

הנכות 1 םוכיס לוגרת 13 1

מבוא לתכנות ב- JAVA מעבדה 2

Practical Session - Heap

תוכנה 1 מערכים. Array Creation and Initialization. Array Declaration. Array Creation and Initialization. Loop through Arrays

תוכנה 1 3 תרגול מס' מערכים ומבני בקרה

מבוא לתכנות מערכות מבחן מועד א' סמסטר חורף

לתיכנות עם MATLAB Lecture 5: Boolean logic and Boolean expressions

תוכנה 1 תרגול 2: מערכים ומבני בקרה

עמוד 1 (תאריך ( âùéä ער äìàù בכל השאלות ניתן להניח שהקלט תקין. 100 íåëñ חורף :

ד"ר אחיה אליסף מר בני לוטטי פרופ' אנדרי שרף הנדסת תוכנה

הנכות 1 תואיגש םע תודדומתהו תואלול,םיכרעמ : לו 2 גרת

משתנים שעור מס. 2 כל הזכויות שמורות דר ' דרור טובי המרכז האוניברסיטאי אריאל 1

הנכות 1 תואיגש םע תודדומתהו תואלול,םי : כרעמ 2 לוגרת

מערכים שעור מס. 4 כל הזכויות שמורות דר ' דרור טובי המרכז האוניברסיטאי אריאל 1

קורס תכנות שיעור שישי: מחרוזות, מצביעים

לתיכנות עם MATLAB Lecture 5: Boolean logic and Boolean expressions

מבוא לתכנות ב- JAVA מעבדה 3. Ipc161-lab3

תרגול 4 פונקציות. מבנה של פונקציה: public static <return value type> <function name> (<arg1 type> <arg1>, <arg2 type> <arg2>, ) { <function body> }

תרשים המחלקות ותרשים העצמים

מחרוזות ב Java ותכנות מונחה בדיקות )Test Driven Development(

Introduction to Programming in C תרגול 8

הוראות לנבחן גמר לבתי ספר לטכנאים ולהנדסאים סמל השאלון: תכנות מערכות ושפת סף ההנחיות בשאלון זה מנוסחות בלשון זכר, אך מכוונות לנבחנות ולנבחנים כאחד.

אוניברסיטת בן-גוריון בהצלחה! מספר נבחן: מדור בחינות רשמו תשובותיכם בשאלון זה בלבד ובמקום המוקצה לכך בלבד! תשובות מחוץ לשאלון לא יבדקו.

נתונות שתי המחלקות הבאות:

תוכנה 1 מערכים. Array Creation and Initialization. Array Declaration. Loop through Arrays. Array Creation and Initialization

מבוא למדעי המחשב עבודה # 3

$ gcc check.c. $ a.out. $ gcc check.c -o check. $ check. $ gcc -Wall check.c -o check. #include <stdio.h>

מבוא למדעי המחשב תירגול 2: מבוא למדעי המחשב מ' - תירגול 2

Practical Session 2 Constants Don t Matter!!!

שאלה 1 מהו הפלט של התוכנית הבאה:

תוכנה 1 בשפת Java נושאים שונים בהורשה רובי בוים ומתי שמרת בית הספר למדעי המחשב אוניברסיטת תל אביב

Simple Web Service. namespace MyService { public class Service1 : System.Web.Services.WebService {

Programming in C תרגול 8

היצביט ומ - ןוכית ת וי נבת

Communication Networks ( ) / Spring 2011 The Blavatnik School of Computer Science, Tel-Aviv University. Allon Wagner

מבוא למדעי המחשב תירגול 3:

פרק 15 טיפוס חדש: מבנים שימוש במבנים שימוש במבנים שימוש במבנים

סטודנטים יקרים הפתרונות מוגשים בסרטוני וידאו המלווים בהסבר קולי, כך שאתם רואים את התהליכים בצורה מובנית, שיטתית ופשוטה, ממש כפי שנעשה בשיעור פרטי.

פתרון מוצע לבחינת מה"ט ב_שפת c מועד אביב תשע"ח, פברואר 8102 מחבר: מר שייקה בילו, מכללת אורט רחובות

תוכנה 1 תרגול מספר 13

תוכנה 1 תרגול מספר 13

סכום (סדרת ערכים) אחרת - דוגמא: סכום-ספרות (num) אם < 10 num החזר 1 או אם = 0 = num החזר 0 public static int numofdigits (int num)

- במפלס התחתון (בתחתית המדרגות) ובמפלס העליון (בראש המדרגות) יש מקום לכל הולכי הרגל

Tutorial 10. Introduction to C++ שימו

תכנות מתקדם בשפת C משתנים

What will happen if we try to compile, link and run this program? Do you have any comments to the code?

Graph Database, think different!

Intermediate Programming, Spring 2017*

גיליון תשובות על תשובות ריקות יינתן 20% מהניקוד!

קורס תכנות בשיעור הקודם למדנו על רקורסיה שיעור שישי: מערכים פונקציה רקורסיבית שאלה חישוב נוסחאות רקורסיביות בשפת C

Smart Pointers Nir Adar

תזכורת: עץבינארי מבוא למדעי המחשב הרצאה 24: עצי חיפוש בינאריים

תוכנה 1. תרגול מס' 3 עבודה עם מחרוזות )Strings( מתודות )Methods( העברת פרמטרים

מבוא לתכנות ב- JAVA תרגול 5. Ipc161- practical session 5

חוברת תרגילים לתרגול יסודות התכנות

שפת XML הפכה להיות נפוצה ובעלת תפקידים רבים, במיוחד עקב גמישותה הרבה:

מבוא לתכנות ב- JAVA מעבדה 4

גיליון תשובות מספר נבחן:

Operating Systems. Practical Session 4 Threads

Engineering Programming A

קורס גרפיקה ממוחשבת 2008 סמסטר ב' ליאור שפירא 1 חלק מהשקפים מעובדים משקפים של פרדו דוראנד, טומס פנקהאוסר ודניאל כהן-אור

ASP.Net Web API.

הוראות לנבחן סף ובהם שמונה שאלות. עליך לענות על שש שאלות, על פי ההנחיות בכל פרק. גמר לבתי ספר לטכנאים ולהנדסאים

ת ונכת סרוק תורשוקמ תומישר :יעישת רועיש 1

דף הדרכה ליצירת שרת/ לקוח עם GUI

גיליון תשובות מספר נבחן:

COSC 320 Exam 2 Key Spring Part 1: Hash Functions

9. טופס הזמנת מוצרים טופס ההזמנה הוא טופס מורכב. מעורבים בו 4 טבלאות נתונים. קשרי הגומלין בין הטבלאות : הטופס :

Transcription:

פקולטה: מדעי הטבע מחלקה: מדעי המחשב שם הקורס: מבנה זכרון ושפת ++C קוד הקורס: 7027810 תאריך בחינה: שאלות לדוגמא משך הבחינה: שעתיים שם המרצים: ד"ר אופיר פלא, ד"ר מירי בן ניסן חומר עזר: פתוח שימוש במחשבון: לא הוראות כלליות (אותן ההוראות יהיו גם במבחן): הניסוח הוא בלשון זכר מטעמי נוחות ומתייחס לכולם/ן! אין בחירה במבחן. יש לענות על כל השאלות. ניתן להסתמך על כל סעיף במבחן גם אם לא פתרתם אותו על מנת לפתור סעיף אחר במבחן. ניתן לרשום לא יודע/ת על סעיף ולזכות ב 20% מהנקודות המוקנות לסעיף הספציפי. במידה ולסעיף ניתנה תשובה ובנוסף נרשם לגבי הסעיף לא יודע/ת אזי הניקוד שיינתן לסעיף יהיה 0 מבלי שהתשובה תיקרא. אם לא רשום דבר בסעיף או שזה כלל לא נמצא ההנחה היא שנרשם לא יודע/ת עבור אותו סעיף. יורדו נקודות על פתרון נכון שאינו אופטימלי בהתייחס לנלמד בקורס. לכל אורך הבחינה הניחו כי: sizeof (char) = 1 sizeof (int) = 4 sizeof (double) = 8 sizeof (void *) = 8 sizeof (size_t) = 8

שאלה 1 נתון קוד בקובץ main.cpp הבא: #include "Computer.hpp" #include "PC.hpp" #include "Macintosh.hpp" int main() { Computer* p[2]; Macintosh imac("joe", "blue"); // owner (all computers have one), // color (only for macs) PC pc("ben", 6); // owner, weight (only for PCs) p[0]= &imac; p[1]= &pc; p[0]->print(); // prints the line: Joe's blue Macintosh p[1]->print(); // prints the line: Ben's 6kg PC return 0; כתבו קוד ב- 3 קבצי ה hpp (כתבו כהערה את שם הקובץ מעל) כך שהקוד יהיה תקין ובסגנון טוב. אין חובה לכתוב את הכללות של קוד מהספרייה הסטנדרטית. שאלה 2 עבור כל הצהרה כתוב במחברת אם היא נכונה או לא. א. ב. ג. ברגע שמגדירים את האופרטור =, אזי האופרטור =! מוגדר אוטומטית לאופרטור שהגדרנו מחדש חייב להיות לפחות אופרנד אחד שהוא user defined מחלקה היא אבסטרקטית רק אם כל המתודות שלה הן pure virtual

שאלה 3 #include <iostream> using namespace std; נתון קטע הקוד הבא: struct A { void f() virtual void g() virtual void h() ~A() ; {cout<<"(1)"<<endl; {cout<<"(2)"<<endl; {cout<<"(3)"<<endl; {cout<<"(4)"<<endl; struct B : public A { void f(int i) virtual void g() void k() virtual ~B() ; {cout<<"(5)"<<endl; {cout<<"(6)"<<endl; {cout<<"(7)"<<endl; {cout<<"(8)"<<endl; struct C : public B { virtual void h() virtual ~C() ; {g(); cout<<"(9)"<<endl; {cout<<"(10)"<<endl; int main() { // Basic pointers to 3 objects: A* ptr_a = new A; B* ptr_b = new B; C* ptr_c = new C; cout << "Part 1:" << endl; ptr_b->f(3); cout << "Part 2:" << endl; A* ptr_atob = ptr_b;

ptr_atob->f(); cout << "Part 3:" << endl; A* ptr_atoc = ptr_c; ptr_atoc->g(); ptr_atoc->h(); cout << "Part 4:" << endl; B* ptr_btoc = ptr_c; ptr_btoc->k(); cout << "Part 5:" << endl; // Note the name of the variables being deleted!!! delete ptr_a; delete ptr_atob; delete ptr_btoc; א. ב. return 0; כתוב במחברת את הטבלאות הוירטואליות של כל אחת מן המחלקות הנ"ל. הקפד על הקידומת ::A או ::B או ::C. בנוסף, הקפידו על הסדר הנכון, כלומר, כך שהפונקציות הוירטואליות של הבן שהן גם וירטואליות אצל האבא יופיעו באותו המקום בטבלה אצל הבן ואצל האבא, כולל ה,destructors כך שאם מצביעים על בן ע"י מצביע לאבא הפונקציה נמצאת באותו המקום. רשום את הפלט של התוכנית הנ"ל, כולל חלקי ה.Part

שאלה 4 מתכנת כתב את הקוד הבא בקובץ :q4.cpp #include <iostream> class IntBuffer { int *_vec; size_t _size; public: IntBuffer (size_t size) : _vec (new int[size]), _size(size) {; int& operator[] (size_t i) {return _vec[i]; int& operator[] (size_t i) const {return _vec[i]; ; int main () { const IntBuffer v(3); v[1]= 15; std::cout << v[1] << std::endl; return 0; משתמש הריץ את הקמפול הפשוט הבא וניסה להריץ את התוכנית, מה הפלט שראה? הסבר. $ g++ -Wall q4.cpp -o q4 $./q4

שאלה 5: קראו את התוכנית הבאה. התוכנית מכפילה שתי סדרות של מספרים איבר, איבר ושמה את התוצאות בסדרה שלישית. הפלט של התוכנית הוא 10-. 0 כתבו את הקובץ mul_elements.hpp" כך שהתוכנית תעבוד היטב. כתבו קוד גנרי ככל האפשר. הניחו כי כל הסדרות הינן באותו האורך (כלומר, מותר שהתנהגות התוכנית תהיה לא מוגדרת אחרת). #include "mul_elements.hpp" #include <list> #include <vector> #include <iostream> int main() { int arr[]= {10,2; const size_t arrlen= sizeof(arr)/sizeof(arr[0]); std::list<int> lst; lst.push_back(-1); lst.push_back(0); // Init a vector with two elements: [-42,-42]; std::vector<int> resultvec(2, -42); mul_elements(arr, arr+arrlen, lst.cbegin(), resultvec.begin()); for (const auto& val : resultvec) { std::cout << val << ' '; return 0;

שאלה 6 מהם הטיפוסים השונים של T שנוצרו במהלך קימפול הקוד הבא: template <typename T> class A { T* _pt; public: A (): _pt (new T ()){ ~A () {delete _pt; ; int main() { A < A<A<int>*> > a; A < A<int> > b; return 0;

פתרון שאלה 1 הערות: שימו לב לשימוש ב.private, protected, public, const, override, virtual בבדיקה תהיה חשיבות גם לסגנון! // Computer.hpp #include <iostream> #include <string> class Computer { virtual void printspecific() const = 0; std::string _owner; protected: Computer(std::string owner) : _owner(owner) { public: virtual ~Computer() { void print() const { std::cout << _owner << "'s "; printspecific(); ; // Macintosh.hpp class Macintosh : public Computer { std::string _color; virtual void printspecific() const override { std::cout << _color << " Macintosh\n"; public:

Macintosh(std::string owner, std::string color) : Computer(owner), _color(color) { ; // PC.hpp class PC : public Computer { unsigned int _weight; virtual void printspecific() const override { std::cout << _weight << "kg PC\n"; public: PC(std::string owner, unsigned int weight) : Computer(owner), _weight(weight) { ; פתרון שאלה 2 א. לא נכון. ב. נכון. ג. לא נכון. פתרון שאלה 3 א A virtual table: A::g() A::h() B virtual table: B::g() A::h() B::~B() C virtual table: B::g() C::h() C::~C()

פתרון שאלה 3 ב Part 1: (5) Part 2: (1) Part 3: (6) (6) (9) Part 4: (7) Part 5: (4) (4) (10) (8) (4) פתרון שאלה 4 הפלט יהיה 15. הסבר: ה const על המטודה גורם לכך שהיא תקבל מצביע this שהוא מטיפוס IntBuffer*.const כלומר, לא ניתן יהיה לשנות דרכו את הערך של השדות אבל יהיה ניתן לשנות דרכו את מה שהשדות מצביעים עליו. פתרון שאלה 5: template<typename InputIter1, typename InputIter2, typename OutputIter> void mul_elements(inputiter1 begin1, InputIter1 end1, InputIter2 begin2, OutputIter begin3) { while (begin1!=end1) { (*begin3)= (*begin1) * (*begin2); ++begin1; ++begin2; ++begin3; int A<int>* A<A<int>*> A<int> פתרון שאלה 6: